Firebird - vyuzitie indexov pre "order by"

Otázka od: Roland Turcan

24. 9. 2004 11:29

Hello All!

Preco nepouzije dva indexy pre zotriedenie vyberu, pokial existuju na
oboch stlpcoch samostatne indexy.
----------------------------------
Priklad #1, je OK:

select a.cislo,a.rok from spisy a
order by a.cislo;

PLAN (A ORDER SPISY_CISLO)
----------------------------------
Priklad #2, je OK:

select a.cislo,a.rok from spisy a
order by a.rok;

PLAN (A ORDER IDX_SPISY_ROK)
----------------------------------
Priklad #3, preco nepouzije index:

select a.cislo,a.rok from spisy a
order by a.cislo,a.rok;

PLAN SORT ((A NATURAL))
----------------------------------
Priklad #4, preco nepouzije index:

select a.cislo,a.rok from spisy a
order by a.rok,a.cislo;

PLAN SORT ((A NATURAL))
----------------------------------

Dakujem.

--
Best regards, TRoland
http://www.rotursoft.sk
http://exekutor.rotursoft.sk


Odpovedá: Pavel Cisar

24. 9. 2004 12:19

Haj hou!

On 24 Sep 2004 at 12:28, Roland Turcan wrote:

> Preco nepouzije dva indexy pre zotriedenie vyberu, pokial existuju na
> oboch stlpcoch samostatne indexy.
>
> Priklad #3, preco nepouzije index:
>
> select a.cislo,a.rok from spisy a
> order by a.cislo,a.rok;
>
> PLAN SORT ((A NATURAL))
> ----------------------------------
> Priklad #4, preco nepouzije index:
>
> select a.cislo,a.rok from spisy a
> order by a.rok,a.cislo;
>
> PLAN SORT ((A NATURAL))
> ----------------------------------

Prave proto, ze se jedna o samostatne indexy. Pouziti indexu pro
realizaci order by, tedy serazeni znamena cteni radku v poradi danem
indexem. Pro cteni v poradi rok,cislo potrebuji index na rok+cislo,
abych mel cislo spravne serazene v ramci dane hodnoty rok, coz mi
samostatny index cislo nezajisti. Uvedom si, ze uvedeni vice polozek
v order by znamena vnorene skupiny. Pokud trvas na pouziti indexu,
vytvor index na rok+cislo, resp. na cislo+rok a Forebird ho pouzije.

Nicmene pouziti indexu pro order by ma vyznam pouze pokud potrebujes
rychle dostat prvni radky vysledku. Pokud ti jde o nacteni cele
mnoziny, pak cteni dle poradi indexu je typicky pomalejsi nez
sekvencni cteni s naslednym setridenim, obvzlaste pokud se tridi v
pameti.

S pozdravem


Pavel Cisar ( ICQ: 89017288)
Mobil: 724 281429
http://www.ibphoenix.cz
Vse co potrebujete pro Firebird a InterBase


Odpovedá: Tomas Bradle

24. 9. 2004 13:51

Kdyz uz jsme u toho, plati totez u podminky WHERE ?
Napr. : WHERE ROK=1998 AND CISLO>456
Jestli ano, musi odpovidat poradi klicu v indexu poradi sloupcu v podmince ?

diky

Tomas Bradle
t.bradle@worldonline.cz


----- Original Message -----
From: "Pavel Cisar" <pcb@atlas.cz>
To: <delphi-l@clexpert.cz>
Sent: Friday, September 24, 2004 1:18 PM
Subject: Re: Firebird - vyuzitie indexov pre "order by"


> Prave proto, ze se jedna o samostatne indexy. Pouziti indexu pro
> realizaci order by, tedy serazeni znamena cteni radku v poradi danem
> indexem. Pro cteni v poradi rok,cislo potrebuji index na rok+cislo,
> abych mel cislo spravne serazene v ramci dane hodnoty rok, coz mi
> samostatny index cislo nezajisti. Uvedom si, ze uvedeni vice polozek
> v order by znamena vnorene skupiny. Pokud trvas na pouziti indexu,
> vytvor index na rok+cislo, resp. na cislo+rok a Forebird ho pouzije.
>
> Nicmene pouziti indexu pro order by ma vyznam pouze pokud potrebujes
> rychle dostat prvni radky vysledku. Pokud ti jde o nacteni cele
> mnoziny, pak cteni dle poradi indexu je typicky pomalejsi nez
> sekvencni cteni s naslednym setridenim, obvzlaste pokud se tridi v
> pameti.
>


Odpovedá: Tomas Michalik

24. 9. 2004 14:15

Tomas Bradle wrote:

> Kdyz uz jsme u toho, plati totez u podminky WHERE ?
> Napr. : WHERE ROK=1998 AND CISLO>456
> Jestli ano, musi odpovidat poradi klicu v indexu poradi sloupcu v podmince ?

Neplati, mohou byt pouzity samostatne indexy.

Tom

========================
Tomas Michalik
vyvoj IS

ProCA, spol. s r.o.
V Luzich 818
Praha 4 - Libus
140 00, Czech Republic

tel: +420 234646446
fax: +420 234646120

michalik@proca.cz
http://www.proca.cz